Welcome to pandas!

7.9 分组进阶应用之分组排名

在对数据完成分组后,可以执行不同的数据处理,比如前面的聚合、转换、过滤就是常见的分组处理方式,不同的处理方式可能会使用不同的处理函数,函数apply,可以遍历Series中的每个元素,也可以遍历DataFrame表格中每行或每列数据,在分组下遍历的是每个分组的DataFrame子表。


import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.7.09 分组进阶应用之分组排名.xlsx" )

print (df)

df[ "总排名" ]=(df.数学+df.语文).rank(ascending=True)

print (df)

t=df.groupby( "班级" ).apply(lambda d:(d.数学+d.语文).rank(ascending=True))

# 把df[ "总排名"]完成放下来,d:表示子表,子表后面的df改成d

print (t)

df=df.assign(分组排名=1)

print (df)

t2=df.groupby( "班级" ).apply( lambda d:d.assign(分组排名=(d.数学+d.语文).rank( ascending = True )))

# 把df.assign(分组排名=放入后面的d

print (t2)

返回df原表:

班级 姓名 语文 数学
0 1班 张三 90 83
1 1班 李四 100 87
2 1班 王五 95 88
3 2班 郭流子 81 97
4 2班 许麻子 92 89
5 3班 宋狗子 89 88
6 3班 小曾 84 84
7 3班 韦大宝 87 94

返回df(总排名):

班级 姓名 语文 数学 总排名
0 1班 张三 90 83 2.0
1 1班 李四 100 87 8.0
2 1班 王五 95 88 7.0
3 2班 郭流子 81 97 4.0
4 2班 许麻子 92 89 5.5
5 3班 宋狗子 89 88 3.0
6 3班 小曾 84 84 1.0
7 3班 韦大宝 87 94 5.5

返回t1:


班级
1班 0 1.0
1 3.0
2 2.0
2班 3 1.0
4 2.0
3班 5 2.0
6 1.0
7 3.0

dtype: float64


返回df+t1:

班级 姓名 语文 数学 总排名 分组排名
0 1班 张三 90 83 2.0 1
1 1班 李四 100 87 8.0 1
2 1班 王五 95 88 7.0 1
3 2班 郭流子 81 97 4.0 1
4 2班 许麻子 92 89 5.5 1
5 3班 宋狗子 89 88 3.0 1
6 3班 小曾 84 84 1.0 1
7 3班 韦大宝 87 94 5.5 1

返回df+t2:

班级 姓名 语文 数学 总排名 分组排名
班级
1班 0 1班 张三 90 83 2.0 1.0
1 1班 李四 100 87 8.0 3.0
2 1班 王五 95 88 7.0 2.0
2班 3 2班 郭流子 81 97 4.0 1.0
4 2班 许麻子 92 89 5.5 2.0
3班 5 3班 宋狗子 89 88 3.0 2.0
6 3班 小曾 84 84 1.0 1.0
7 3班 韦大宝 87 94 5.5 3.0